//
//  UserAccount.swift
//  上海微博
//
//  Created by co on 16/2/28.
//  Copyright © 2016年 王南侠. All rights reserved.
//

import UIKit

/// 用户账户key
private let CZWeiboUserAccountKey = "cn.itcast.userAccount"
class UserAcount:NSObject {
    
    /// 用户账户单例，全局入口
    static let shareUserAccount = UserAcount()
    
    /// 用户登录标记
    var isLogin: Bool {
        return access_token != nil
    }
    
    /// 用于调用access_token，接口获取授权后的access token
    var access_token: String?
    /// access_token的生命周期，单位是秒数，`string`
    /// 在设置 expires_in 属性的同时，计算出过期日期
    var expires_in: NSTimeInterval = 0{
        didSet {
            // 计算过期日期
            expiresDate = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
    /// 过期日期
    var expiresDate:NSDate? // 记住是NSDdate 不是data 是资料
    
    /// 当前授权用户的UID
    var uid: String?
    /// 用户昵称
    var screen_name: String?
    /// 用户头像地址（大图），180×180像素
    var avatar_large: String?
    
    // MARK : - 构造函数
    // 提示如果在inint  方法前面 增加private 修饰符，可以限制外界通过（）直接创建对象
    private override init() {
        super.init()
        loadUserAccount()
    }

    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}

    override var description: String{
        // 模型转字典
        let keys = ["access_token","uid","expires_in","expiresDate","screen_name","avatar_large"] // 模型写错了会报错
        
        return dictionaryWithValuesForKeys(keys).description
    }
    
}

// MARK: - 加载和保存用户信息
extension UserAcount {
  
    /// 使用字典更新 模型 数据
    ///
    /// - parameter dict: 字典
    func updataUserAccont(dict:[String: AnyObject]) {
        setValuesForKeysWithDictionary(dict)
        
        saveUserAccount()
        
    }
    
    /// 当前用户 账户 保存到用户偏好
        private  func saveUserAccount(){
        
        // 1.模型转字典
        let keys = ["access_token","uid","expires_in","expiresDate","screen_name","avatar_large"]
        let dict = dictionaryWithValuesForKeys(keys)
        // 2.将字典写入偏好
        NSUserDefaults.standardUserDefaults().setObject(dict, forKey: CZWeiboUserAccountKey)
        print(NSHomeDirectory())
    }
       // 加载用户账户
        private func loadUserAccount(){
        
        //从用户偏好加载
        guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(CZWeiboUserAccountKey) as? [String: AnyObject] else {
            return
        }
        // 2.字典转模型
            setValuesForKeysWithDictionary(dict)
            // 测试过期日期
//            expiresDate = NSDate(timeIntervalSinceNow: 20*60*60)
            
        // 3. 判断是否过期，如果过期，将 token 设置为 nil
            if isExpired {
                print("token过期")
                access_token = nil
            } else {
                print("token 正常")
            }
        
    }
    /// 判断是否过期
    private var isExpired:Bool {
        // 将过期日期和当前系统日起进行比较
        // 2016-01-01 // 升序
        // 2016-02-15   当前
        // 2016-12-30 // 降序
        return expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedAscending
    }
    
}
